home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2000 #4 / Amiga Plus CD - 2000 - No. 4.iso / Tools / Misc / bgui / Examples / Source / LayoutGroupDemo.c < prev    next >
C/C++ Source or Header  |  2000-05-09  |  8KB  |  325 lines

  1. /*
  2.  * @(#) $Header: /cvsroot/bgui/gadgets/LayoutGroup/LayoutGroupDemo.c,v 41.11 2000/05/09 20:34:44 mlemos Exp $
  3.  *
  4.  * BGUI library
  5.  *
  6.  * (C) Copyright 2000 BGUI Developers Team.
  7.  * (C) Copyright 1998 Manuel Lemos.
  8.  * All Rights Reserved.
  9.  *
  10.  * $Log: LayoutGroupDemo.c,v $
  11.  * Revision 41.11  2000/05/09 20:34:44  mlemos
  12.  * Bumped to revision 41.11
  13.  *
  14.  * Revision 1.2  2000/05/09 19:59:47  mlemos
  15.  * Merged with the branch Manuel_Lemos_fixes.
  16.  *
  17.  * Revision 1.1.2.2  2000/05/05 18:08:02  mlemos
  18.  * Changed the positions, spans and weights of tree nodes and arrows to make
  19.  * them layout cleaner.
  20.  *
  21.  * Revision 1.1.2.1  2000/05/04 05:08:39  mlemos
  22.  * Initial revision.
  23.  *
  24.  *
  25.  */
  26.  
  27. #include <libraries/bgui.h>
  28. #include <libraries/bgui_macros.h>
  29.  
  30. #include <proto/exec.h>
  31. #include <proto/dos.h>
  32. #include <proto/intuition.h>
  33. #include <proto/bgui.h>
  34. #include <clib/alib_protos.h>
  35.  
  36. #include <bgui/bgui_layoutgroup.h>
  37.  
  38. /*
  39.  * Output file handle and BGUI
  40.  * library base.
  41.  */
  42. BPTR     StdOut;
  43. struct Library *BGUIBase;
  44.  
  45. VOID Tell( UBYTE *fstr, ... )
  46. {
  47.    if ( StdOut ) VFPrintf( StdOut, fstr, ( ULONG * )&fstr + 1 );
  48. }
  49.  
  50. STATIC struct VectorItem left_down_arrow[] = {
  51.    { 20, 20, VIF_SCALE                  },
  52.    { 19,  0, VIF_MOVE | VIF_AREASTART   },
  53.    {  1, 18, VIF_DRAW                   },
  54.    {  0, 16, VIF_DRAW                   },
  55.    {  0, 20, VIF_DRAW                   },
  56.    {  4, 20, VIF_DRAW                   },
  57.    {  2, 19, VIF_DRAW                   },
  58.    { 20,  1, VIF_DRAW                   },
  59.    { 20,  0, VIF_DRAW                   },
  60.    { 19,  0, VIF_AREAEND | VIF_LASTITEM },
  61. };
  62.  
  63. STATIC struct VectorItem right_down_arrow[] = {
  64.    {  40, 40,  VIF_SCALE                  },
  65.    {   2,  0,  VIF_MOVE | VIF_AREASTART   },
  66.    {  38, 36,  VIF_DRAW                   },
  67.    {  40, 32,  VIF_DRAW                   },
  68.    {  40, 40,  VIF_DRAW                   },
  69.    {  32, 40,  VIF_DRAW                   },
  70.    {  36, 38,  VIF_DRAW                   },
  71.    {   0,  2,  VIF_DRAW                   },
  72.    {   0,  0,  VIF_DRAW                   },
  73.    {   2,  0,  VIF_AREAEND | VIF_LASTITEM },
  74. };
  75.  
  76. #define TreeNode(name,row,column) \
  77.     ButtonObject, \
  78.         LAB_Label, name, \
  79.     EndObject, \
  80.     LGNA_Row,row, \
  81.     LGNA_Column,column, \
  82.     LGNA_ColumnSpan,2, \
  83.     LGNA_VerticalWeight,0, \
  84.     LGNA_LeftWeight,0, \
  85.     LGNA_WidthWeight,1, \
  86.     LGNA_RightWeight,0, \
  87.     LGNA_TopOffset,1, \
  88.     LGNA_BottomOffset,1, \
  89.     LGNA_TopSpacing,1, \
  90.     LGNA_BottomSpacing,1
  91.  
  92. #define LeftArrow(row,column) \
  93.     ButtonObject, \
  94.         VIT_VectorArray, left_down_arrow, \
  95.         NoFrame,  \
  96.     EndObject, \
  97.     LGNA_Row,row, \
  98.     LGNA_Column,column, \
  99.     LGNA_VerticalWeight,1, \
  100.     LGNA_LeftWeight,0, \
  101.     LGNA_WidthWeight,1, \
  102.     LGNA_RightWeight,0, \
  103.     LGNA_TopWeight,0, \
  104.     LGNA_HeightWeight,1, \
  105.     LGNA_BottomWeight,0, \
  106.     LGNA_TopOffset,0, \
  107.     LGNA_RightOffset,0, \
  108.     LGNA_BottomOffset,0, \
  109.     LGNA_TopSpacing,0, \
  110.     LGNA_RightSpacing,0, \
  111.     LGNA_BottomSpacing,0
  112.  
  113. #define RightArrow(row,column) \
  114.     ButtonObject, \
  115.         VIT_VectorArray, right_down_arrow, \
  116.         NoFrame,  \
  117.     EndObject, \
  118.     LGNA_Row,row, \
  119.     LGNA_Column,column, \
  120.     LGNA_VerticalWeight,1, \
  121.     LGNA_LeftWeight,0, \
  122.     LGNA_WidthWeight,1, \
  123.     LGNA_RightWeight,0, \
  124.     LGNA_TopWeight,0, \
  125.     LGNA_HeightWeight,1, \
  126.     LGNA_BottomWeight,0, \
  127.     LGNA_LeftOffset,0, \
  128.     LGNA_TopOffset,0, \
  129.     LGNA_BottomOffset,0, \
  130.     LGNA_LeftSpacing,0, \
  131.     LGNA_TopSpacing,0, \
  132.     LGNA_BottomSpacing,0
  133.  
  134. static Object *OpenMainWindow(struct MsgPort *SharedPort,struct Window **main)
  135. {
  136.    Object            *object=NULL;
  137.  
  138.    /*
  139.    ** Not created yet? Create it now!
  140.    **/
  141.    if ( ! object ) {
  142.       object = WindowObject,
  143.          WINDOW_Title,     "BGUI Layout Group demo",
  144.          WINDOW_RMBTrap,         TRUE,
  145.          WINDOW_SmartRefresh, TRUE,
  146.          WINDOW_AutoAspect,   TRUE,
  147.          WINDOW_SharedPort,   SharedPort,
  148.          WINDOW_MasterGroup,
  149.             BGUI_NewObject(BGUI_LAYOUTGROUP_GADGET,
  150.                LGA_LayoutType,LGT_TABLE,
  151.                FRM_Title,"Laying gadgets in a tree using the table layout",
  152.                NeXTFrame,
  153.                StartMember,
  154.                   TreeNode("Root node",0,2),
  155.                EndMember,
  156.                StartMember,
  157.                   LeftArrow(1,2),
  158.                EndMember,
  159.                StartMember,
  160.                   RightArrow(1,3),
  161.                EndMember,
  162.                StartMember,
  163.                   TreeNode("Left branch",2,1),
  164.                EndMember,
  165.                StartMember,
  166.                   TreeNode("Right branch",2,3),
  167.                EndMember,
  168.                StartMember,
  169.                   LeftArrow(3,1),
  170.                EndMember,
  171.                StartMember,
  172.                   RightArrow(3,2),
  173.                EndMember,
  174.                StartMember,
  175.                   LeftArrow(3,3),
  176.                EndMember,
  177.                StartMember,
  178.                   RightArrow(3,4),
  179.                EndMember,
  180.                StartMember,
  181.                   TreeNode("Left leaf",4,0),
  182.                EndMember,
  183.                StartMember,
  184.                   TreeNode("Middle leaf",4,2),
  185.                EndMember,
  186.                StartMember,
  187.                   TreeNode("Right leaf",4,4),
  188.                EndMember,
  189.             TAG_END),
  190.       EndObject;
  191.  
  192.    }
  193.  
  194.    /*
  195.    ** Object OK?
  196.    **/
  197.    if ( object ) {
  198.       /*
  199.       ** Open window.
  200.       **/
  201.       if((*main=WindowOpen( object ))==NULL)
  202.       {
  203.           DisposeObject(object);
  204.           object=NULL;
  205.       }
  206.    }
  207.  
  208.    return( object );
  209. }
  210.  
  211. static VOID StartDemo(void)
  212. {
  213.    Object         *WA_Main;
  214.    struct MsgPort *SharedPort;
  215.    ULONG       sigmask = 0L, sigrec,rc;
  216.    struct Window         *main=NULL, *sigwin;
  217.    BOOL        running = TRUE;
  218.  
  219.    /*
  220.    ** Create the shared message port.
  221.    **/
  222.    if ( SharedPort = CreateMsgPort()) {
  223.       /*
  224.       ** Open the main window.
  225.       **/
  226.       if ( WA_Main = OpenMainWindow(SharedPort,&main)) {
  227.          /*
  228.          ** OR signal masks.
  229.          **/
  230.          sigmask |= ( 1L << SharedPort->mp_SigBit );
  231.          /*
  232.          ** Loop...
  233.          **/
  234.          do {
  235.             /*
  236.             ** Wait for the signals to come.
  237.             **/
  238.             sigrec = Wait( sigmask );
  239.  
  240.             /*
  241.             ** Find out the which window signalled us.
  242.             **/
  243.             if ( sigrec & ( 1 << SharedPort->mp_SigBit )) {
  244.                while ( sigwin = GetSignalWindow( WA_Main )) {
  245.  
  246.                   /*
  247.                   ** Main window signal?
  248.                   **/
  249.                   if ( sigwin == main ) {
  250.                      /*
  251.                      ** Call the main-window event handler.
  252.                      **/
  253.                      while (( rc = HandleEvent( WA_Main )) != WMHI_NOMORE ) {
  254.                         switch ( rc ) {
  255.  
  256.                            case  WMHI_CLOSEWINDOW:
  257.                               running = FALSE;
  258.                               break;
  259.  
  260.                         }
  261.                      }
  262.                   }
  263.                }
  264.             }
  265.          } while ( running );
  266.       }
  267.       /*
  268.       ** Dispose of all window objects.
  269.       **/
  270.       if (WA_Main)   DisposeObject(WA_Main);
  271.       /*
  272.       ** Delete the shared message port.
  273.       **/
  274.       DeleteMsgPort( SharedPort );
  275.    } else
  276.       Tell( "Unable to create a message port.\n" );
  277. }
  278.  
  279. /*
  280.  * Main entry point.
  281.  */
  282. int main( int argc, char **argv )
  283. {
  284.    struct Process       *this_task = ( struct Process * )FindTask( NULL );
  285.    BOOL            is_wb = FALSE;
  286.  
  287.    if ( this_task->pr_CLI )
  288.       /*
  289.        * Started from the CLI. Simply pickup
  290.        * the CLI output handle.
  291.        */
  292.       StdOut = Output();
  293.    else {
  294.       /*
  295.        * Workbench startup. Open a console
  296.        * for output.
  297.        */
  298.       StdOut = Open( "CON:10/10/500/100/BGUI Demo Output/WAIT/AUTO", MODE_NEWFILE );
  299.       is_wb = TRUE;
  300.    }
  301.  
  302.    /*
  303.     * Open BGUI.
  304.     */
  305.    if ( BGUIBase = OpenLibrary( BGUINAME, BGUIVERSION )) {
  306.       /*
  307.        * Run the demo.
  308.        */
  309.       StartDemo();
  310.       CloseLibrary( BGUIBase );
  311.    } else
  312.       Tell( "Unable to open %s version %ld\n", BGUINAME, BGUIVERSION );
  313.  
  314.    /*
  315.     * Close console if ran from
  316.     * the workbench.
  317.     */
  318.    if ( is_wb ) {
  319.       if ( StdOut ) Close( StdOut );
  320.    }
  321.  
  322.    return( 0 );
  323. }
  324.  
  325.